package com.lvmama.rhino.service;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.lvmama.rhino.entity.H5RuleVO;
import com.lvmama.rhino.entity.H5pageMonitorVO;
import com.lvmama.rhino.entity.PageMonitorVO;
import com.lvmama.rhino.pojo.H5PageMonitorChannel;
import com.lvmama.rhino.pojo.H5PageMonitorNetworkType;
import com.lvmama.rhino.pojo.H5PageMonitorOperator;
import com.lvmama.rhino.pojo.H5PageMonitorRegion;
import com.lvmama.rhino.pojo.H5Rule;
import com.lvmama.rhino.pojo.H5RuleList;
import com.lvmama.rhino.pojo.OptionData;
import com.lvmama.rhino.pojo.PageMonitor;
import com.lvmama.rhino.pojo.PageMonitorInfo;

public interface PageMonitorService {

    /**
     * 根据条件分页查询
     * @param pageMonitorVO
     * @return
     */
    PageInfo<PageMonitor> queryPageMonitorList(PageMonitorVO pageMonitorVO);

    /**
     * 根据条件查询所有数据信息
     * @param pageMonitorVO
     * @return
     */
    List<PageMonitor> queryTimePageMonitorList(PageMonitorVO pageMonitorVO);
    List<PageMonitorInfo> queryTimePageMonitorInfoList(PageMonitorVO pageMonitorVO);

    /**
     * 根据条件查询需要导出的数据
     * @param pageMonitorVO
     * @return
     */
    List<PageMonitor> queryExportPageMonitorList(PageMonitorVO pageMonitorVO);

    /**
     * 根据条件查询总的访问次数
     * @param pageMonitorVO
     * @return
     */
    Integer queryPageMonitorListCount(PageMonitorVO pageMonitorVO);

    /**
     * 查询各个时段的总量
     * @param pageMonitorVO
     * @return
     */
    OptionData queryOptionData(PageMonitorVO pageMonitorVO);

    /**
     * 查询符合条件的数据
     * @param pageMonitorVO
     * @return
     */
    List<PageMonitorInfo> getMessageInfoListPage(PageMonitorVO pageMonitorVO);

    /**
     * 查询分区是否存在
     * @param string
     * @return
     */
    String queryPartition(String string);

    /**
     * 新建分区
     * @param string
     * @param dateStr
     */
    void createPartition(Map<String, Object> param);

    /**
     * H5首屏统计
     * @param h5pageMonitorVO
     * @return
     */
	PageInfo<PageMonitor> H5pageMonitorSearchPage(
			H5pageMonitorVO h5pageMonitorVO);

	/**
	 * H5首屏统计导出-根据查询条件, 查询数据
	 * @param h5pageMonitorVO
	 * @return
	 */
	List<PageMonitor> H5pageMonitorSearchExport(H5pageMonitorVO h5pageMonitorVO);

	
	/**
	 * 保存添加的规则
	 * @param h5Ruleform
	 * @param jsonPrizes
	 */
	void saveH5Ruleform(H5Rule h5Ruleform, JSONObject jsonPrizes);

	/**
	 * 查询添加的规则类型name
	 * @return
	 */
	List<H5Rule> queryAllRuleTypeName();

	/**
	 * 根据规则名id,查询出规则link_url
	 * @param ruleId
	 * @return
	 */
	List<H5RuleList> queryUrlByRuleId(String ruleId);



	/**
	 * 首屏耗时-渠道版本-根据查询条件，查找满足条件的数据
	 * @param map2
	 * @return
	 */
	List<H5PageMonitorChannel> queryH5PageMonitorChannel(
			Map<String, Object> map2);

	/**
	 * 首屏耗时-运营商-根据查询条件, 查找满足条件的数据
	 * @param map2
	 * @return
	 */
	List<H5PageMonitorOperator> queryH5PageMonitorOperator(
			Map<String, Object> map2);

	/**
	 * 首屏耗时-网络制式-根据查询条件, 查找满足条件的数据
	 * @param map2
	 * @return
	 */
	List<H5PageMonitorNetworkType> queryH5PageMonitorNetworkType(
			Map<String, Object> map2);


	/**
	 * 首屏耗时-网络制式-根据查询条件, 取出网络制式总量amount
	 * @param map2
	 * @return
	 */
	H5PageMonitorNetworkType queryTotalByNetworkType(
			Map<String, Object> map2);

	/**
	 * 根据查询条件,取出渠道版本总量amount
	 * @param map2
	 * @return
	 */
	H5PageMonitorChannel queryTotal(Map<String, Object> map2);

	/**
	 * 首屏耗时-运营商-根据查询条件, 取出运营商总量amount
	 * @param map2
	 * @return
	 */
	H5PageMonitorOperator queryTotalByOperators(Map<String, Object> map2);

	/**
	 * 首屏耗时-地域-根据查询条件, 查找满足条件的数据
	 * @param map2
	 * @return
	 */
	List<H5PageMonitorRegion> queryRegionProvinceList(
			Map<String, Object> map2);

	/**
	 * 根据查询条件,取出各个渠道版本样本量
	 * @param map2
	 * @return
	 */
	List<H5PageMonitorChannel> queryTotalGroupByChannel(Map<String, Object> map2);

	/**
	 * 根据查询条件,取出各个运营商样本量
	 * @param map2
	 * @return
	 */
	List<H5PageMonitorOperator> queryTotalGroupByOperator(
			Map<String, Object> map2);

	/**
	 * 根据查询条件,取出各个网络制式本样本量
	 * @param map2
	 * @return
	 */
	List<H5PageMonitorNetworkType> queryTotalGroupByNetworkType(
			Map<String, Object> map2);


	/**
	 * 维护规则起始列表页面
	 * @param h5RuleVO
	 * @return
	 */
	PageInfo<H5Rule> H5pageMonitorMaintenancePage(H5RuleVO h5RuleVO);

	
	/**
	 * 维护规则-删除-规则类型
	 * @param id
	 */
	void deleteRuleType(String id);

	/**
	 * 维护规则-删除-配置规则
	 * @param ruleId
	 */
	void deleteRuleUrl(String ruleId);

	/**
	 * 维护规则-编辑-查询元素
	 * @param id
	 * @return
	 */
	H5Rule queryH5RuleListById(String id);

	/**
	 * 维护规则-编辑-保存元素
	 * @param h5Ruleform
	 */
	void saveEditRule(H5Rule h5Ruleform);

    
}
